home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / PALETTE.PAK / PALETTEX.CPP < prev    next >
C/C++ Source or Header  |  1997-05-06  |  4KB  |  162 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows
  3. // Copyright (c) 1991, 1995 by Borland International, All Rights Reserved
  4. //----------------------------------------------------------------------------
  5. #include <owl/pch.h>
  6. #include <owl/applicat.h>
  7. #include <owl/framewin.h>
  8. #include <owl/dialog.h>
  9. #include <owl/dc.h>
  10. #include <alloc.h>
  11. #include "palette.h"
  12.  
  13. const int BoxW = 20;
  14. const int BoxH = 20;
  15. const int NumColors = 48;
  16. const TColor Colors[NumColors] = {
  17.   0x00FFFFFFl,0x00E0E0E0l,0x00C0C0FFl,0x00C0E0FFl,0x00E0FFFFl,0x00C0FFC0l,
  18.   0x00FFFFC0l,0x00FFC0C0l,0x00FFC0FFl,0x000000C0l,0x000040C0l,0x0000C0C0l,
  19.   0x0000C000l,0x00C0C000l,0x00C00000l,0x00C000C0l,
  20.   0x00C0C0C0l,0x00404040l,0x008080FFl,0x0080C0FFl,0x0080FFFFl,0x0080FF80l,
  21.   0x00FFFF80l,0x00FF8080l,0x00FF80FFl,0x00000080l,0x00004080l,0x00008080l,
  22.   0x00008000l,0x00808000l,0x00800000l,0x00800080l,
  23.   0x00808080l,0x00000000l,0x000000FFl,0x000080FFl,0x0000FFFFl,0x0000FF00l,
  24.   0x00FFFF00l,0x00FF0000l,0x00FF00FFl,0x00000040l,0x00404080l,0x00004040l,
  25.   0x00004000l,0x00404000l,0x00400000l,0x00400040l
  26. };
  27.  
  28. //
  29. // class TTestWindow
  30. // ~~~~~ ~~~~~~~~~~~
  31. class TTestWindow : public TWindow {
  32.   public:
  33.     TTestWindow();
  34.    ~TTestWindow();
  35.  
  36.     void EvSize(uint, TSize&);
  37.     void Paint(TDC& dc, bool erase, TRect& rect);
  38.     void EvLButtonDown(uint, TPoint&);
  39.     void CmAbout();
  40.  
  41.     LOGPALETTE* MyLogPalette; // Logical palette struct filled with colors
  42.     bool        PalDevice;    // does display have a physical palette?
  43.  
  44.   DECLARE_RESPONSE_TABLE(TTestWindow);
  45. };
  46.  
  47. DEFINE_RESPONSE_TABLE1(TTestWindow, TWindow)
  48.   EV_WM_SIZE,
  49.   EV_WM_LBUTTONDOWN,
  50.   EV_COMMAND(CM_ABOUT, CmAbout),
  51. END_RESPONSE_TABLE;
  52.  
  53. TTestWindow::TTestWindow()
  54. :
  55.   TWindow(0, 0, 0)
  56. {
  57.   MyLogPalette = (LOGPALETTE*)new char[sizeof(LOGPALETTE) + sizeof(PALETTEENTRY) * NumColors];
  58.   MyLogPalette->palVersion = 0x300;
  59.   MyLogPalette->palNumEntries = NumColors;
  60.  
  61.   for (int i = 0; i < NumColors; ++i) {
  62.     MyLogPalette->palPalEntry[i].peRed = Colors[i].Red();
  63.     MyLogPalette->palPalEntry[i].peGreen = Colors[i].Green();
  64.     MyLogPalette->palPalEntry[i].peBlue = Colors[i].Blue();
  65.     MyLogPalette->palPalEntry[i].peFlags = PC_RESERVED;
  66.   }
  67.  
  68.   TScreenDC screenDC;
  69.   PalDevice = (screenDC.GetDeviceCaps(RASTERCAPS) & RC_PALETTE) ? true : false;
  70. }
  71.  
  72. TTestWindow::~TTestWindow()
  73. {
  74.   delete[] MyLogPalette;
  75. }
  76.  
  77. void
  78. TTestWindow::EvSize(uint how, TSize& sz)
  79. {
  80.   TWindow::EvSize(how, sz);
  81.   Invalidate(true);
  82. }
  83.  
  84. void
  85. TTestWindow::Paint(TDC& paintDC, bool /*erase*/, TRect& /*rect*/)
  86. {
  87.   TPalette palette(MyLogPalette);
  88.   paintDC.SelectObject(palette);
  89.   paintDC.RealizePalette();
  90.  
  91.   TRect rect;
  92.   GetClientRect(rect);
  93.   int hc = rect.Width() / BoxW;
  94.  
  95.   for (int i = 0; i < NumColors; i++) {
  96.     TColor palColor(i);
  97.     int x = (i % hc) * BoxW;
  98.     int y = (i / hc) * BoxH;
  99.     paintDC.TextRect(x, y, x+BoxW, y+BoxH, palColor);
  100.     paintDC.RestoreBrush();
  101.   }
  102. }
  103.  
  104. void
  105. TTestWindow::EvLButtonDown(uint, TPoint&)
  106. {
  107.   PALETTEENTRY PaletteEntry = MyLogPalette->palPalEntry[0];
  108.  
  109.   int i;
  110.   for (i = 0; i < NumColors-1; i++)
  111.     MyLogPalette->palPalEntry[i] = MyLogPalette->palPalEntry[i + 1];
  112.   MyLogPalette->palPalEntry[i] = PaletteEntry;
  113.  
  114.   if (PalDevice) {
  115.     TClientDC paintDC(*this);
  116.     TPalette Palette(MyLogPalette);
  117.     paintDC.SelectObject(Palette);
  118.     paintDC.RealizePalette();
  119.     paintDC.RestorePalette();
  120.   }
  121.   else
  122.     Invalidate(true);
  123. }
  124.  
  125. void
  126. TTestWindow::CmAbout()
  127. {
  128.   TDialog(this, IDD_ABOUT).Execute();
  129. }
  130.  
  131. //----------------------------------------------------------------------------
  132.  
  133. //
  134. // class TTestApp
  135. // ~~~~~ ~~~~~~~~
  136. class TTestApp : public TApplication {
  137.   public:
  138.     TTestApp()
  139.     :
  140.       TApplication()
  141.     {
  142.     }
  143.  
  144.     virtual void InitMainWindow();
  145. };
  146.  
  147. void
  148. TTestApp::InitMainWindow()
  149. {
  150.   TFrameWindow* frame = new TFrameWindow(0, "Palette Tester", new TTestWindow);
  151.   frame->AssignMenu(IDM_PALTEST);
  152.  
  153.   SetMainWindow(frame);
  154. }
  155.  
  156. int
  157. OwlMain(int /*argc*/, char* /*argv*/ [])
  158. {
  159.   TTestApp app;
  160.   return app.Run();
  161. }
  162.